#include "drummap.h"

#define NOTA_MIDI_BOMBO     36
#define NOTA_MIDI_CAJA1     38
#define NOTA_MIDI_CAJA2     40
#define NOTA_MIDI_RIDE1     51
#define NOTA_MIDI_RIDE2     59
#define NOTA_MIDI_CRASH     49
#define NOTA_MIDI_TOM       48
#define NOTA_MIDI_BASE      41
#define NOTA_MIDI_HIHAT1    46
#define NOTA_MIDI_HIHAT2	44
#define NOTA_MIDI_HIHAT3	 4
#define NOTA_MIDI_HIHAT_PIE	26

#define NOMBRE_NOTA_BOMBO      "bass"
#define NOMBRE_NOTA_CAJA       "snare"
#define NOMBRE_NOTA_RIDE       "ride"
#define NOMBRE_NOTA_CRASH      "crash"
#define NOMBRE_NOTA_TOM        "tom"
#define NOMBRE_NOTA_BASE       "base"
#define NOMBRE_NOTA_RIDE       "ride"
#define NOMBRE_NOTA_HIHAT      "hihat"
#define NOMBRE_NOTA_HHFOOT     "hhfoot"

DrumMap::DrumMap()
{
    asignarColor(NOMBRE_NOTA_BOMBO, Qt::green);
    asignarColor(NOMBRE_NOTA_CAJA, Qt::darkRed);    
    asignarColor(NOMBRE_NOTA_TOM, Qt::cyan);
    asignarColor(NOMBRE_NOTA_BASE, Qt::darkCyan);

    asignarColor(NOMBRE_NOTA_HIHAT, QColor(0xFF, 0x80, 0));
    asignarColor(NOMBRE_NOTA_HHFOOT, QColor(0x80, 0x00, 0x80));
    asignarColor(NOMBRE_NOTA_CRASH, Qt::red);
    asignarColor(NOMBRE_NOTA_RIDE, Qt::darkRed);

	asignar(NOTA_MIDI_BOMBO, NOMBRE_NOTA_BOMBO);
	asignar(NOTA_MIDI_CAJA1, NOMBRE_NOTA_CAJA);
	asignar(NOTA_MIDI_CAJA2, NOMBRE_NOTA_CAJA);
	asignar(NOTA_MIDI_RIDE1, NOMBRE_NOTA_RIDE);
	asignar(NOTA_MIDI_RIDE2, NOMBRE_NOTA_RIDE);
	asignar(NOTA_MIDI_CRASH, NOMBRE_NOTA_CRASH);
	asignar(NOTA_MIDI_TOM, NOMBRE_NOTA_TOM);
	asignar(NOTA_MIDI_BASE, NOMBRE_NOTA_BASE);
	asignar(NOTA_MIDI_HIHAT1, NOMBRE_NOTA_HIHAT);
	asignar(NOTA_MIDI_HIHAT2, NOMBRE_NOTA_HIHAT);
	asignar(NOTA_MIDI_HIHAT3, NOMBRE_NOTA_HIHAT);
	asignar(NOTA_MIDI_HIHAT_PIE, NOMBRE_NOTA_HHFOOT);
}

DrumMap::~DrumMap()
{

}

QString DrumMap::getNombreNota(int nota)
{
	if (!mapaNombres.contains(nota)) {
		int notaPrincipal = mapaEquivalencias.value(nota);
		return mapaNombres.value(notaPrincipal);
	}
	return mapaNombres.value(nota);
}

//int DrumMap::getNotaPrincipal(const QString& nombreNota)
//{
//	return mapaNotas.value(nombreNota);
//}

//int DrumMap::getNotaPrincipal(int nota)
//{
//	if (!mapaEquivalencias.contains(nota)) {
//		return nota;
//	}
//	return mapaEquivalencias.value(nota);
//}

void DrumMap::asignar(int nota, const QString& nombreNota)
{
	if (mapaNotas.contains(nombreNota)) {
		int notaPrincipal = mapaNotas.value(nombreNota);
		mapaEquivalencias.insert(nota, notaPrincipal);
		return;
	}
	mapaNombres.insert(nota, nombreNota);
	mapaNotas.insert(nombreNota, nota);
}

QColor DrumMap::getColorNota(const QString& nombreNota)
{
    return mapaColores.value(nombreNota);
}

QColor DrumMap::getColorNota(int nota)
{
    return getColorNota(getNombreNota(nota));
}

void DrumMap::asignarColor(const QString& nombreNota, const QColor& color)
{
    mapaColores.insert(nombreNota, color);
}